package com.study.lib_tiandi_map.interfaces

/**
 * 经纬度的点
 */
data class Point(val lng: Double, val lat: Double)

interface MapControl {

    /**
     * 监听回调的接口
     */
    var onMapLoadComplete: OnMapLoadComplete
    var onMapClick: OnMapClick
    var getAreaPoints: GetAreaPoints
    var getArea: GetArea
    var onPolygonClick: OnPolygonClick

    /**
     * 以当前缩放级别为参考，放大一个级别
     */
    fun zoomToLarge()

    /**
     * 以当前缩放级别为参考，缩小一个级别
     */
    fun zoomToSmall()

    /**
     * 放大或缩小到指定级别
     */
    fun zoomTo(zoomLevel: Int)

    /**
     * 地图加载完成回调,其他操作，需等待地图加载完成方可回调
     */
    fun setOnMapLoadListener(onMapLoadComplete: OnMapLoadComplete)

    /**
     * 在地图上画点
     */
    fun addPoint(lng: Double, lat: Double)

    /**
     * 获取地图的中心点坐标
     */
    fun getCenter(callBack: MapCenterCallBack)

    /**
     * 添加标注
     */
    fun addMarker(lng: Double, lat: Double)

    /**
     * 画线
     */
    fun drawLine(
        points: List<Point>,
        color: String = "blue",
        weight: Int = 5,
        isEdit: Boolean = false,
        tag: String = "line"
    )

    /**
     * 画平面
     * points 面的点集合，最少三个点
     * color 面边界线的颜色
     * weight 边界线的粗细
     * opacity 边界线的透明度
     * fillColor 填充颜色
     * fillOpacity 填充颜色的透明度
     * isEdit 是否可编辑
     */
    fun drawArea(
        points: List<Point>,
        color: String = "blue",
        weight: Int = 5,
        opacity: Float = 0.5f,
        fillColor: String = "#FFFFFF",
        fillOpacity: Float = 0.5f,
        isEdit: Boolean = false,
        tag: String = "polygon"
    )

    /**
     * 清除所有图层
     */
    fun clearAllLayer()

    /**
     * 定位当前位置
     */
    fun location()

    /**
     * 设置地图中心点位置
     */
    fun setCenter(lng: Double, lat: Double, zoom: Int = 15)

    /**
     * 添加地图点击监听事件
     */
    fun setOnMapClickListener(onMapClick: OnMapClick)

    /**
     * 设置面的点击事件
     */
    fun addOnPolygonClickListener(onPolygonClick: OnPolygonClick)

    /**
     * 移除地图的点击事件监听
     */
    fun removeMapClick()

    /**
     * 获取最后一个添加的面的所有坐标
     */
    fun geAreaPointsByTag(tag: String = "polygon", getAreaPoints: GetAreaPoints)

    /**
     * 获取面积
     */
    fun getPolygonArea(points: List<Point>, getArea: GetArea)

    /**
     * 根据tag隐藏覆盖物
     */
    fun hideOverLayByTag(tag: String)

    /**
     * 根据tag展示覆盖物
     */
    fun showOverLayByTag(tag: String)

    /**
     * 获取地图缩放级别
     */
    fun getZoom(callBack: MapZoomCallBack)

    /**
     * 添加infoWindow
     */
    fun addInfoWindow(lng: Double, lat: Double, msg: String)
}